package services.common;

import java.io.File;
import java.util.List;

import models.common.entity.t_pact;
import models.common.entity.t_template_pact;

import org.apache.commons.lang.StringUtils;

import play.Play;
import services.base.BaseService;

import common.enums.PactType;
import common.utils.Factory;
import common.utils.LoggerUtil;
import common.utils.ResultInfo;
import common.utils.pdf.DefaultPdfWatermark;
import common.utils.pdf.PDFUtil;

import daos.common.PactDao;
import daos.common.TemplatePactDao;

/**
 * 合同service的具体实现
 *
 * @description 
 *
 * @author DaiZhengmiao
 * @createDate 2016年1月18日
 */
public class PactService extends BaseService<t_pact> {

	protected PactDao pactDao = null;
	
	protected TemplatePactDao templatePactDao = Factory.getDao(TemplatePactDao.class);
	
	protected PactService (){
		this.pactDao = Factory.getDao(PactDao.class);
		super.basedao = pactDao;
	}	
	
	/**
	 * 插入一条合同记录到数据库
	 *
	 * @param pact
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月19日
	 */
	public ResultInfo createPact(t_pact pact) {
		ResultInfo result = new ResultInfo();
		boolean flag = pactDao.save(pact);
		if(!flag){
			result.code = -1;
			result.msg = "合同没有添加到数据库";
			
			return result;
		} 
		result.code = 1;
		result.msg = "合同添加成功";
		result.obj = pact;
	
		return result;
	}
	
	/**
	 * 更新一个合同模板的名称/内容、水印
	 *
	 * @param id 待更新模板的id
	 * @param name 更新后的名称
	 * @param content 合同模板的内容
	 * @param imageUrl 水印图片的路径
	 * @param imageResolution 水印图片吗的分辨率
	 * @param imageSize 水印图片的大小
	 * @param imageFormat 水印图片的后缀名
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月18日
	 */
	public boolean updatePactTemp(long id,String name,String content,String imageUrl,String imageResolution,String imageSize,String imageFormat) {
		t_template_pact pact = templatePactDao.findByID(id);
		pact.name = name;
		pact.content = content;
		pact.image_url = imageUrl;
		pact.image_resolution = imageResolution;
		pact.image_size = imageSize;
		pact.image_format = imageFormat;
		
		return templatePactDao.save(pact);
	}
	
	/**
	 * 依据id查询当前的合同信息
	 * @param id
	 * @return
	 * @author liaijun
	 *@version 2018年1月28日
	 */
    public t_pact findByPidId(long id){
		return findByColumn(" pid = ? ", id);
	}
	
	/////---------------------------以下是没有用的
	/**
	 * 根据合同类型查找合同模板
	 *
	 * @param pactType
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月19日
	 */
	public t_template_pact findByType(PactType pactType) {
		t_template_pact temp = templatePactDao.findByColumn(" type=? ", pactType.code);
		
		return temp;
	}
	
	/**
	 * 
	 * 一对多---商票融通的合同信息
	 * @param bidId
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月19日
	 */
	public t_pact findRightPact(long bidId) {
		t_pact pact = pactDao.findByColumn(" type=? and pid=?  ORDER BY id DESC", PactType.BID_ANY_RIGHT.code,bidId);
		
		return  pact;
	}
	/**
	 * 查找bid对应的合同(一个bid只有一份合同)
	 * 一对多---商票宝
	 * @param bidId
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月19日
	 */
	public t_pact findBaoPact(long bidId) {
		t_pact pact = pactDao.findByColumn(" type=? and pid=?  ORDER BY id DESC", PactType.BID_ANY_BAO.code,bidId);
		
		return  pact;
	}
	
	/**
	 * 查找bid对应的合同(一个bid只有一份合同)
	 * 一对一---商票
	 * @param bidId
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月19日
	 */
	public t_pact findTictPact(long bidId) {
		t_pact pact = pactDao.findByColumn(" type=? and pid=?  ORDER BY id DESC", PactType.BID_ONE.code,bidId);
		
		return  pact;
	}
	
	/**
	 * 查找bid对应的合同(一个bid只有一份合同) 投资
	 * 一对一---商票
	 * @param bidId
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月19日
	 */
	public t_pact findInvestTictPact(long bidId) {
		t_pact pact = pactDao.findByColumn(" type=? and pid=?  ORDER BY id DESC", PactType.INVEST_BID_ONE_ONE.code,bidId);
		
		return  pact;
	}
	/**
	 * 查找债权对应的合同(一个债权只有一份合同)
	 *
	 * @param debtId
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月19日
	 */
	public t_pact findByDebtId(long debtId,int pactType) {
		t_pact pact = pactDao.findByColumn(" type=? and pid=?  order by id desc",pactType,debtId);
		
		return  pact;
	}
	
	/**
	 * 查找保证金对应的承诺函 
	 *
	 * @param 保证金承诺函 保证金id
	 * @return
	 *
	 * @author liaijun
	 * @createDate 2016年1月19日
	 */
	public t_pact findByBondId(long bond_id) {
		t_pact pact = pactDao.findByColumn(" type=? and pid=?", PactType.BOND_PACt.code,bond_id);
		
		return  pact;
	}
	/**
	 * 查找银票对应的协议
	 *
	 * @param 保证金承诺函 保证金id
	 * @return
	 *
	 * @author liaijun
	 * @createDate 2016年1月19日
	 */
	public t_pact findByYpId(long yp_id) {
		t_pact pact = pactDao.findByColumn(" type=? and pid=?", PactType.YP_BID.code,yp_id);
		
		return  pact;
	}
	/**
	 * 查询所有的合同模板
	 *
	 * @param currPage
	 * @param pageSize
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月18日
	 */
	public List<t_template_pact> queryAllTemps() {
		
		return templatePactDao.findAll();
	}

	/**
	 * 根据合同模板id查找合同
	 *
	 * @param tempId 合同id
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月18日
	 */
	public t_template_pact findByTempId(long tempId) {
		
		return templatePactDao.findByID(tempId);
	}

	/**
	 * 导出合同成PDF文档
	 *
	 * @param pactId 合同id
	 * @param withWater 是否添加水印
	 * @return 如果成功则obj中为导出后的file
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月19日
	 */
	public ResultInfo exportPact(String image_url,String content, boolean withWater) {
		ResultInfo result = new ResultInfo();
				
		/*t_pact pact = pactDao.findByID(pactId);
		if (pact == null) {
			result.code = -1;
			result.msg = "合同不存在";

			return result; 
		}*/
		
		File expFile = null;
		try {
//			String image_url = image_url;
			if(withWater && StringUtils.isNotBlank(image_url)){
				
				if (image_url.startsWith("/")) {
					image_url = image_url.substring(1);
				}
				File file = Play.getFile(image_url);
				String imgString = "";
				if(file.exists()){
					imgString = file.getAbsolutePath();
				} else {
					imgString = PDFUtil.WATERMARKIMAGEPATH;
				}
				
				expFile = PDFUtil.exportHTMLPdfWithWatermark(content, null, new DefaultPdfWatermark(imgString));
			} else {
				expFile = PDFUtil.exportHTMLPdf(content, null);
			}
			result.code = 1;
			result.msg = "导出成功";
			result.obj = expFile;
			
		} catch (Exception e) {
			e.printStackTrace();
			LoggerUtil.info(false, e, "合同导出失败");
			result.code = -1;
			result.msg = "合同导出失败!";
		}
		
		return result;
	}
	protected static CompanyInfoService companyInfoService= Factory.getService(CompanyInfoService.class);
	/**
	 * 删除合同
	 *
	 * @param id 合同id
	 * @return
	 * @author xiaojun
	 *@version 2017-7-19
	 */
	public  boolean delete(long id){
		int delete = pactDao.delete(id);
		return   delete == 1?true:false;
	}
	
	/**
	 * APP查看合同
	 * @param bidId 
	 * @param type 合同类型                      0  商票融通      1 债权转让                                2 股东及实际控制人连带责任保证承诺函       3  银票融通                                                       4 商票融通协
	 * 							5银票融通协     6 缴纳保证金签署承诺函      7 商票信用流通合作协议(商票债权)     8 商票信用流通合作协议(数字商票)   9  商票信用流通合作协议(背书)
	 * @return
	 * @author binghui.zhou
	 * @createDate 2017年8月7日
	 */
	public t_pact queryBidPact(long bidId, int type) {
		t_pact pact = pactDao.findByColumn(" type=? and pid=?  ORDER BY id DESC", type,bidId);
		return  pact;
	}

	/**
	 * 更新合同归档的状态
	 * @Title: updateDebtAmount 
	 * @param  id 债权转让的id
	 * @param  amount 转让金额
	 * @return: int
	 * @author: liaijun   
	 * @date: 2017年7月21日 上午11:32:16 
	 * @version: V1.0
	 */
	public int updateStatus(long debtId,int pactType,int status){
		 return pactDao.updateStatus(debtId,pactType, status);
	}
}
